package com.sanjiahantang.youjiarole.module.city.models.impl;

import android.content.Context;
import android.os.Handler;

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.sanjiahantang.uilibrary.utils.Cn2Spell;
import com.sanjiahantang.uilibrary.utils.Utils;
import com.sanjiahantang.youjiarole.base.BaseBean;
import com.sanjiahantang.youjiarole.base.BaseView;
import com.sanjiahantang.youjiarole.base.CallBack;
import com.sanjiahantang.youjiarole.config.ConfigValue;
import com.sanjiahantang.youjiarole.http.BaseDelegate;
import com.sanjiahantang.youjiarole.http.OkHttpClientManager;
import com.sanjiahantang.youjiarole.module.city.beans.CityBean;
import com.sanjiahantang.youjiarole.module.city.models.ICityModel;
import com.sanjiahantang.youjiarole.utils.L;
import com.squareup.okhttp.Request;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by zy on 2017/9/19.
 */

public class CityModel implements ICityModel {
    @Override
    public void loadCityList(final Context context, final CallBack<CityBean> callBack) {
        try {
            InputStream is = context.getResources().getAssets().open("province_data.json");
            InputStreamReader isr = new InputStreamReader(is, "UTF-8");
            Gson gson = new Gson();
            List<CityBean.Province> provinces = gson.fromJson(isr, new TypeToken<List<CityBean.Province>>() {
            }.getType());
            ArrayList<String> provinceList = new ArrayList<String>();
            ArrayList<CityBean.City> cityList = new ArrayList<CityBean.City>();
            if (provinces != null) {
                for (int i = 0, max = provinces.size(); i < max; i++) {
                    provinceList.add(provinces.get(i).getName());
                    if (null != provinces.get(i).getCity()) {
                        for (int j = 0, max_j = provinces.get(i).getCity().size(); j < max_j; j++) {
                            CityBean.City city = new CityBean.City();
                            city.setRegion_name(provinces.get(i).getCity().get(j).getName());
                            city.setPinyin(Cn2Spell.getPinYinFirstLetter(provinces.get(i).getCity().get(j).getName())) ;
                            cityList.add(city);
                        }
                    }
                }
            }
            CityBean bean = new CityBean();
            CityBean.Data data = new CityBean.Data();
            data.setHot_city(cityList);
            bean.setData(data);
            callBack.onSuccess(bean,context,null);
        } catch (IOException e) {
            // Should never happen!
            throw new RuntimeException(e);
        }
    }

    @Override
    public void getAllArea(final Context context, final ArrayList<String> listProvince,
                           final ArrayList<ArrayList<String>> listCity,
                           final ArrayList<ArrayList<ArrayList<String>>> listArea, final CallBack<BaseBean> callBack) {
        if(ConfigValue.isDebug){
            new Handler().postDelayed(new Runnable() {
                public void run() {
                    String result;
                    try {
                        ByteArrayOutputStream outputStream=new ByteArrayOutputStream();
                        InputStream is = context.getResources().getAssets().open("province_data.json");
                        // Read the entire asset into a local byte buffer.
                        byte[] buffer = new byte[1024];
                        int len=-1;
                        while ((len=is.read(buffer))!=-1){
                            outputStream.write(buffer,0,len);
                        }
                        outputStream.flush();
                        is.close();
                        outputStream.close();

                        result= new String(outputStream.toByteArray(), "UTF-8");

                        Utils.showToast(context,result.toString());
                        L.e("wa",result.toString());

//                        // Finally stick the string into the text view.
//                        TextView tv = (TextView) findViewById(R.id.text);
//                        tv.setText(text);
                    } catch (IOException e) {
                        // Should never happen!
                        throw new RuntimeException(e);
                    }
                }




//                    listProvince.clear();
//                    listCity.clear();
//                    listArea.clear();
//                    //选项1
//                    listProvince.add("1广东");
//                    listProvince.add("1湖南");
//                    listProvince.add("1广西");
//
//                    //选项2
//                    ArrayList<String> options2Items_01 = new ArrayList<String>();
//                    options2Items_01.add("广州");
//                    options2Items_01.add("佛山");
//                    options2Items_01.add("东莞");
//                    options2Items_01.add("阳江");
//                    options2Items_01.add("珠海");
//                    ArrayList<String> options2Items_02 = new ArrayList<String>();
//                    options2Items_02.add("长沙");
//                    options2Items_02.add("岳阳");
//                    ArrayList<String> options2Items_03 = new ArrayList<String>();
//                    options2Items_03.add("桂林");
//                    listCity.add(options2Items_01);
//                    listCity.add(options2Items_02);
//                    listCity.add(options2Items_03);
//
//                    //选项3
//                    ArrayList<ArrayList<String>> options3Items_01 = new ArrayList<ArrayList<String>>();
//                    ArrayList<ArrayList<String>> options3Items_02 = new ArrayList<ArrayList<String>>();
//                    ArrayList<ArrayList<String>> options3Items_03 = new ArrayList<ArrayList<String>>();
//                    ArrayList<String> options3Items_01_01 = new ArrayList<String>();
//                    options3Items_01_01.add("白云");
//                    options3Items_01_01.add("天河");
//                    options3Items_01_01.add("海珠");
//                    options3Items_01_01.add("越秀");
//                    options3Items_01.add(options3Items_01_01);
//                    ArrayList<String> options3Items_01_02 = new ArrayList<String>();
//                    options3Items_01_02.add("南海");
//                    options3Items_01_02.add("高明");
//                    options3Items_01_02.add("顺德");
//                    options3Items_01_02.add("禅城");
//                    options3Items_01.add(options3Items_01_02);
//                    ArrayList<String> options3Items_01_03 = new ArrayList<String>();
//                    options3Items_01_03.add("其他");
//                    options3Items_01_03.add("常平");
//                    options3Items_01_03.add("虎门");
//                    options3Items_01.add(options3Items_01_03);
//                    ArrayList<String> options3Items_01_04 = new ArrayList<String>();
//                    options3Items_01_04.add("其他1");
//                    options3Items_01_04.add("其他2");
//                    options3Items_01_04.add("其他3");
//                    options3Items_01.add(options3Items_01_04);
//                    ArrayList<String> options3Items_01_05 = new ArrayList<String>();
//                    options3Items_01_05.add("其他1");
//                    options3Items_01_05.add("其他2");
//                    options3Items_01_05.add("其他3");
//                    options3Items_01.add(options3Items_01_05);
//
//                    ArrayList<String> options3Items_02_01 = new ArrayList<String>();
//                    options3Items_02_01.add("长沙长沙长沙长沙长沙长沙长沙长沙长沙1111111111");
//                    options3Items_02_01.add("长沙2");
//                    options3Items_02_01.add("长沙3");
//                    options3Items_02_01.add("长沙4");
//                    options3Items_02_01.add("长沙5");
//                    options3Items_02_01.add("长沙6");
//                    options3Items_02_01.add("长沙7");
//                    options3Items_02_01.add("长沙8");
//                    options3Items_02.add(options3Items_02_01);
//                    ArrayList<String> options3Items_02_02 = new ArrayList<String>();
//                    options3Items_02_02.add("岳1");
//                    options3Items_02_02.add("岳2");
//                    options3Items_02_02.add("岳3");
//                    options3Items_02_02.add("岳4");
//                    options3Items_02_02.add("岳5");
//                    options3Items_02_02.add("岳6");
//                    options3Items_02_02.add("岳7");
//                    options3Items_02_02.add("岳8");
//                    options3Items_02_02.add("岳9");
//                    options3Items_02.add(options3Items_02_02);
//                    ArrayList<String> options3Items_03_01 = new ArrayList<String>();
//                    options3Items_03_01.add("好山水");
//                    options3Items_03.add(options3Items_03_01);
//
//                    listArea.add(options3Items_01);
//                    listArea.add(options3Items_02);
//                    listArea.add(options3Items_03);
//                    callBack.onSuccess(null,context, null);
//                }
            }, 1000);
            return;
        }
    }

    @Override
    public void getAllArea(final Context context, final BaseView.OnLoadListener callBack) {
        try {
            InputStream is = context.getResources().getAssets().open("province_data.json");
            InputStreamReader isr = new InputStreamReader(is,"UTF-8");
            Gson gson = new Gson();
            List<CityBean.Province> provinces = gson.fromJson(isr,new TypeToken<List<CityBean.Province>>(){}.getType());
            ArrayList<String> provinceList = new ArrayList<String>();
            ArrayList<ArrayList<String>> cityList = new ArrayList<ArrayList<String>>();
            ArrayList<ArrayList<ArrayList<String>>> areaList = new ArrayList<ArrayList<ArrayList<String>>>();
            if (provinces != null){
                for (int i = 0,max = provinces.size();i<max;i++){
                    provinceList.add(provinces.get(i).getName());
                    if (null != provinces.get(i).getCity()){
                        ArrayList<String> cities = new ArrayList<String>();
                        ArrayList<ArrayList<String>> areas = new ArrayList<ArrayList<String>>();
                        for (int j = 0,max_j = provinces.get(i).getCity().size();j<max_j;j++){
                            cities.add(provinces.get(i).getCity().get(j).getName());
                            areas.add((ArrayList<String>) provinces.get(i).getCity().get(j).getArea());
                        }
                        cityList.add(cities);
                        areaList.add(areas);
                    }
                }
            }
            Object[] result = new Object[3];
            result[0] = provinceList;
            result[1] = cityList;
            result[2] = areaList;
            callBack.onLoad(result);
        } catch (IOException e) {
            // Should never happen!
            throw new RuntimeException(e);
        }
    }
}
